package com.example.vue20220225.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.vue20220225.model.Role;
import com.example.vue20220225.model.UserInfo;
import com.example.vue20220225.model.UserRole;
import com.example.vue20220225.service.UserService;
import com.example.vue20220225.util.MyEmail;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    UserService userService;
    @Resource
    MyEmail myEmail;
    @Resource
    RedisTemplate redisTemplate;


    // test  前后端连接
    @RequestMapping("/test")
    public Map<String,Object> test(){
        Map<String,Object> map = new HashMap<>();
        System.out.println("test 被访问了");
        map.put("message","vue返回数据");
        return map;
    }
    //   查询所有用户
    @RequestMapping("/list")
    public Map<String,Object> list(){
        return userService.list();
    }

    // 添加用户
    @RequestMapping("/adduser")
    public Map<String,Object> adduser(UserInfo userInfo){
        //  获取前端传过来的数据
        System.out.println(userInfo);
        //  调用 添加服务
        return userService.add(userInfo);
    }

    // 删除用户
    @RequestMapping("/deleteuser")
    public Map<String,Object> deleteuser(Integer id){
        //  获取前端传过来的数据
        System.out.println(id);
        //  调用 删除服务
        return userService.deleteuser(id);
    }

    /*
     分页的话   1  当前的页数   2  每页显示的条数
     */
    @RequestMapping("/pagelist")
    //   如果后面 页面上加 条件查询
    public Map<String,Object> pagelist(UserInfo userInfo){
        System.out.println(userInfo.getPage());
        System.out.println(userInfo.getRow());
        return userService.pagelist(userInfo);
    }

    //  登录 接口
    @RequestMapping("login")
    public Map<String,Object> login(UserInfo userInfo){
        System.out.println(userInfo);
        Map<String,Object> map = new HashMap<>();
        if(userInfo.getUsername() == null || userInfo.getUsername().isEmpty()){
            map.put("message","账号不能为空");
        }
        if(userInfo.getPassword() == null || userInfo.getPassword().isEmpty()){
            map.put("message","密码不能为空");
        }
        return userService.login(userInfo);
    }

    // 调用邮件发送接口
    @RequestMapping("/sendemail")
    public Map<String,Object> sendemail(String emailname){
        // 生成一个随机数字
        String code = "";
        Random random = new Random();
        for(int i =0;i<5;i++){
            code += random.nextInt(10)+"";
        }
        //  随机数字  验证码  存起来
//        HttpSession session = request.getSession();
//        session.setAttribute("code",code);
        //  redis 存 验证码
        //  TimeUnit.MINUTES  设置失效时间
        //redisTemplate.opsForValue().set(emailname+"code",code);
        redisTemplate.opsForValue().set(emailname+"code",code,2, TimeUnit.MINUTES);
        //  email 发送到指定邮箱
        HashMap<String, Object> map = myEmail.sendEmail(emailname, "验证码是：" + code, "发送验证码");
        return map;
    }

    // 邮件登录
    @RequestMapping("/emaillogin")
    public Map<String,Object> emaillogin(UserInfo userInfo){
        Map<String,Object> map = new HashMap<>();
        System.out.println(userInfo);
//        //  获取 session中  验证码
////        HttpSession session = request.getSession();
////        String code = session.getAttribute("code")+"";
        String code = redisTemplate.opsForValue().get(userInfo.getUsername()+"code")+"";
        System.out.println(code);
        //  判断 输入的验证码 是否一致
        if(userInfo.getPassword().equals(code)){
            map.put("message","邮箱登录成功");
        }else{
            map.put("message","邮箱登录失败");
        }
        return map;
    }

    //  查询用户对应的菜单权限
    @RequestMapping("/queryPowerlist")
    public Map<String,Object> queryPowerlist(UserInfo userInfo){
        return userService.queryPowerlist(userInfo);
    }

    //  查询用户数据 包括角色
    @RequestMapping("/queryUserlist")
    public Map<String,Object> queryUserlist(UserInfo userInfo){
        return userService.queryUserlist(userInfo);
    }

    //  查询所有角色
    @RequestMapping("/queryroles")
    public Map<String,Object> queryroles(){
        return userService.queryroles();
    }
    //  修改用户的角色
    @RequestMapping("/editUserRoll")
    public Map<String,Object> editUserRoll(UserInfo userInfo){
        return userService.editUserRoll(userInfo);
    }

    // 修改用户状态
    @RequestMapping("/updateUserstats")
    public Map<String,Object> updateUserstats(UserInfo userInfo){
        return userService.updateUserstats(userInfo);
    }

    //  查询角色列表
    @RequestMapping("/queryrolespower")
    public Map<String,Object> queryrolespower(UserInfo userInfo){
        return userService.queryrolespower(userInfo);
    }
}
